#clear
rm(list=ls())

##########################
###FEDERAL TRANSFERS:

#library load
library(tidyverse)
library(rvest)
library(pdftools)
library(tidyverse)
library(haven)
library(rlist)
library(openxlsx)
library(rworldmap)
library(readxl)
library(lubridate)
library(stringi)
library(fuzzyjoin)
library(dplyr)
library(tidyr)
library(lfe)
library(stargazer)


setwd() #set to your local working directory

#########
## PRE-PROCESSING DATA:

#import raw budget data:
#municipal data base
efipem_15 <- read.csv("efipem_municipal_csv/conjunto_de_datos/efipem_municipal_anual_tr_cifra_2015.csv", fileEncoding="UTF-8-BOM")
efipem_16 <- read.csv("efipem_municipal_csv/conjunto_de_datos/efipem_municipal_anual_tr_cifra_2016.csv", fileEncoding="UTF-8-BOM")
efipem_17 <- read.csv("efipem_municipal_csv/conjunto_de_datos/efipem_municipal_anual_tr_cifra_2017.csv", fileEncoding="UTF-8-BOM")
efipem_18 <- read.csv("efipem_municipal_csv/conjunto_de_datos/efipem_municipal_anual_tr_cifra_2018.csv", fileEncoding="UTF-8-BOM")
efipem_mc_15 <- read.csv("efipem_alcaldias_csv/conjunto_de_datos/efipem_alcaldia_anual_tr_cifra_2015.csv", fileEncoding="UTF-8-BOM") %>% mutate(ID_MUNICIPIO=ID_ALCALDIA) %>% select(-ID_ALCALDIA)
efipem_mc_16 <- read.csv("efipem_alcaldias_csv/conjunto_de_datos/efipem_alcaldia_anual_tr_cifra_2016.csv", fileEncoding="UTF-8-BOM") %>% mutate(ID_MUNICIPIO=ID_ALCALDIA) %>% select(-ID_ALCALDIA)
efipem_mc_17 <- read.csv("efipem_alcaldias_csv/conjunto_de_datos/efipem_alcaldia_anual_tr_cifra_2017.csv", fileEncoding="UTF-8-BOM") %>% mutate(ID_MUNICIPIO=ID_ALCALDIA) %>% select(-ID_ALCALDIA)
efipem_mc_18 <- read.csv("efipem_alcaldias_csv/conjunto_de_datos/efipem_alcaldia_anual_tr_cifra_2018.csv", fileEncoding="UTF-8-BOM") %>% mutate(ID_MUNICIPIO=ID_ALCALDIA) %>% select(-ID_ALCALDIA)

#table of content: states
states <- read.csv("efipem_municipal_csv/catalogos/tc_entidad.csv", fileEncoding="UTF-8-BOM")

#table of content: municipalities
munis <- read.csv("efipem_municipal_csv/catalogos/tc_municipio.csv", fileEncoding="UTF-8-BOM")

#table of content: mexico city boroughs
mc_munis <- read.csv("efipem_alcaldias_csv/catalogos/tc_alcaldia.csv", fileEncoding="UTF-8-BOM") %>% mutate(ID_MUNICIPIO=ID_ALCALDIA,NOM_MUN=NOM_ALC) %>% select(-ID_ALCALDIA,-NOM_ALC)

munis <- rbind(munis,mc_munis)



#load lottery data:
load(file = "../valid_diputado_dummy.RDa")

#state name corrections for merge
valid_diputado_dummy$estado[valid_diputado_dummy$estado=="VERACRUZ"] <- 'VERACRUZ DE IGNACIO DE LA LLAVE'
valid_diputado_dummy$estado[valid_diputado_dummy$estado=="MICHOACAN"] <- 'MICHOACAN DE OCAMPO'
valid_diputado_dummy$estado[valid_diputado_dummy$estado=="COAHUILA"] <- 'COAHUILA DE ZARAGOZA'

#widen data
efipem_15_wide <- efipem_15 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )
efipem_16_wide <- efipem_16 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )
efipem_17_wide <- efipem_17 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )
efipem_18_wide <- efipem_18 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )

efipem_mc_15_wide <- efipem_mc_15 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )
efipem_mc_16_wide <- efipem_mc_16 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )
efipem_mc_17_wide <- efipem_mc_17 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )
efipem_mc_18_wide <- efipem_mc_18 %>% mutate(TEMA=toupper(TEMA), CATEGORIA=toupper(CATEGORIA), DESCRIPCION_CATEGORIA=toupper(DESCRIPCION_CATEGORIA)) %>% group_by(ID_ENTIDAD,ID_MUNICIPIO, TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO) %>% mutate (row=row_number()) %>% pivot_wider(names_from = c(TEMA, CATEGORIA, DESCRIPCION_CATEGORIA, ANIO, row), values_from = VALOR, )

#merge data
full_efipem <- full_join(efipem_15_wide,efipem_16_wide, by=c("ID_ENTIDAD","ID_MUNICIPIO"))
full_efipem <- full_join(full_efipem,efipem_17_wide, by=c("ID_ENTIDAD","ID_MUNICIPIO"))
full_efipem <- full_join(full_efipem,efipem_18_wide, by=c("ID_ENTIDAD","ID_MUNICIPIO"))

full_mc_efipem <- full_join(efipem_mc_15_wide,efipem_mc_16_wide, by=c("ID_ENTIDAD","ID_MUNICIPIO"))
full_mc_efipem <- full_join(full_mc_efipem,efipem_mc_17_wide, by=c("ID_ENTIDAD","ID_MUNICIPIO"))
full_mc_efipem <- full_join(full_mc_efipem,efipem_mc_18_wide, by=c("ID_ENTIDAD","ID_MUNICIPIO"))

full_efipem <- full_join(full_efipem,full_mc_efipem)

#add states to full efipem
full_efipem <- left_join(full_efipem,states)

#add municipalities to full efipem
full_efipem <- left_join(full_efipem,munis)

#join to lottery dataset
valid_diputado_dummy_fed_trans <- left_join(full_efipem %>% mutate(municipio= stri_trans_general(toupper(as.character(NOM_MUN)), id="Latin-ASCII"),estado=stri_trans_general(toupper(as.character(NOM_ENT)), id="Latin-ASCII")),
                                            valid_diputado_dummy %>% mutate(municipio=stri_trans_general(toupper(as.character(municipio_residencia)), id="Latin-ASCII"),estado=stri_trans_general(toupper(as.character(estado)), id="Latin-ASCII"))) %>% select(-PROD_EST.x,-COBERTURA.x,-PROD_EST.y,COBERTURA.y)

#subset to municipalities with lottery candidates:
transfers <- subset(valid_diputado_dummy_fed_trans, diputado_dummy==1 | diputado_dummy==0)

#recode budget line items that do not exist for some municipalities (i.e., observations without federal transfers) as 0:
transfers <- 
  transfers %>%
  mutate_all(~replace(., is.na(.), 0)) 


#code outcome variable: federal transfers (per capita) to federal entities and municipalities (ramo 28):
transfers$PARTICIPACIONES_2015_per_capita <- transfers$`INGRESOS_CAPÍTULO_PARTICIPACIONES FEDERALES_2015_1` / transfers$lista_nominal_deputies
transfers$PARTICIPACIONES_2016_per_capita <- transfers$`INGRESOS_CAPÍTULO_PARTICIPACIONES FEDERALES_2016_1` / transfers$lista_nominal_deputies
transfers$PARTICIPACIONES_2017_per_capita <- transfers$`INGRESOS_CAPÍTULO_PARTICIPACIONES FEDERALES_2017_1` / transfers$lista_nominal_deputies
transfers$PARTICIPACIONES_2018_per_capita <- transfers$`INGRESOS_CAPÍTULO_PARTICIPACIONES FEDERALES_2018_1` / transfers$lista_nominal_deputies



#########
## ANALYSIS:

##ramo28:
#prepare data:
transfers$ramo28_2015 <- transfers$PARTICIPACIONES_2015_per_capita
transfers$ramo28_2016 <- transfers$PARTICIPACIONES_2016_per_capita
transfers$ramo28_2017 <- transfers$PARTICIPACIONES_2017_per_capita
transfers$ramo28_2018 <- transfers$PARTICIPACIONES_2018_per_capita


#2016:
did_2016_wide <- subset(transfers, select=c(id_mun,municipio_residencia,estado,tombola,circunscripcion,ipw,diputado_dummy,
                                                   PARTICIPACIONES_2016_per_capita,PARTICIPACIONES_2015_per_capita))
did_2016_long <- gather(did_2016_wide, time, ramo28_2016, PARTICIPACIONES_2016_per_capita:PARTICIPACIONES_2015_per_capita, factor_key=F)

did_2016_long$time[did_2016_long$time=="PARTICIPACIONES_2016_per_capita"] <- 1
did_2016_long$time[did_2016_long$time=="PARTICIPACIONES_2015_per_capita"] <- 0

#DiD:
did_2016_ipw <- felm(ramo28_2016 ~ diputado_dummy * time  | 0 | 0 | municipio_residencia, data=did_2016_long, weights=did_2016_long$ipw)

summary(did_2016_ipw)



#2017:
did_2017_wide <- subset(transfers, select=c(id_mun,municipio_residencia,estado,tombola,circunscripcion,ipw,diputado_dummy,
                                              PARTICIPACIONES_2017_per_capita,PARTICIPACIONES_2015_per_capita))
did_2017_long <- gather(did_2017_wide, time, ramo28_2017, PARTICIPACIONES_2017_per_capita:PARTICIPACIONES_2015_per_capita, factor_key=F)

did_2017_long$time[did_2017_long$time=="PARTICIPACIONES_2017_per_capita"] <- 1
did_2017_long$time[did_2017_long$time=="PARTICIPACIONES_2015_per_capita"] <- 0

#DiD:
did_2017_ipw <- felm(ramo28_2017 ~ diputado_dummy * time  | 0 | 0 | municipio_residencia, data=did_2017_long, weights=did_2017_long$ipw)

summary(did_2017_ipw)



#2018:
did_2018_wide <- subset(transfers, select=c(id_mun,municipio_residencia,estado,tombola,circunscripcion,ipw,diputado_dummy,
                                              PARTICIPACIONES_2018_per_capita,PARTICIPACIONES_2015_per_capita))
did_2018_long <- gather(did_2018_wide, time, ramo28_2018, PARTICIPACIONES_2018_per_capita:PARTICIPACIONES_2015_per_capita, factor_key=F)

did_2018_long$time[did_2018_long$time=="PARTICIPACIONES_2018_per_capita"] <- 1
did_2018_long$time[did_2018_long$time=="PARTICIPACIONES_2015_per_capita"] <- 0

#DiD:
did_2018_ipw <- felm(ramo28_2018 ~ diputado_dummy * time  | 0 | 0 | municipio_residencia, data=did_2018_long, weights=did_2018_long$ipw)

summary(did_2018_ipw)


#function to report one-tailed tests:
one_tailed <- function(x){
  p_one_tailed <- x / 2
  return(p_one_tailed)
}


##Table G2:
stargazer(did_2016_ipw,did_2017_ipw,did_2018_ipw,
          dep.var.caption = "Transfers (Per Capita)",
          dep.var.labels = c("in 2016", "in 2017", "in 2018"),
          covariate.labels = c("Constant","Represented","Time","Represented x Time"),
          type="latex", 
          digits = 0,
          apply.p = one_tailed,
          intercept.bottom = F,
          keep.stat=c("n"),
          add.lines = list(c("Municipalities", 98, 98, 98)),
          no.space=TRUE,
          out="TableG2.tex")



